package sistema.controleVendas.controladores;

import java.util.ArrayList;
import java.util.List;

import sistema.controleVendas.entidades.Contas;
import sistema.controleVendas.entidades.Estoque;
import sistema.controleVendas.entidades.Itens;
import sistema.controleVendas.entidades.Pessoa;
import sistema.controleVendas.entidades.Produto;
import sistema.controleVendas.entidades.TipoConta;
import sistema.controleVendas.entidades.TipoTransacao;
import sistema.controleVendas.entidades.Transacao;
import sistema.controleVendas.fachadas.GerenciarContaFachada;
import sistema.controleVendas.fachadas.GerenciarEstoqueFachada;
import sistema.controleVendas.fachadas.GerenciarItemFachada;
import sistema.controleVendas.fachadas.GerenciarProdutoFachada;
import sistema.controleVendas.fachadas.GerenciarTipoContaFachada;
import sistema.controleVendas.fachadas.GerenciarTipoTransacaoFachada;
import sistema.controleVendas.fachadas.GerenciarTransacaoFachada;

public class RealizarVenda {
	public void realizarCompra(List<Itens> itens, Pessoa fornecedor){
		Contas conta = new Contas();
		conta.setPessoa(fornecedor);
		conta.setValor(verTotal(itens));
		TipoConta tConta = new TipoConta();
		tConta.setId(2);//compra
		conta.setTipoConta(GerenciarTipoContaFachada
				.getInstance().buscarTipoConta(tConta));
		Transacao transacao = new Transacao();
		TipoTransacao tTransacao = new TipoTransacao();
		tTransacao.setId(2);//compra
		transacao.setItens(itens);
		transacao.setTipoTransacao(GerenciarTipoTransacaoFachada.getInstance().buscarTipoTransacao(tTransacao));
		GerenciarTransacaoFachada.getInstance().inserirTransacao(transacao);
		conta.setTransacao(transacao);
		GerenciarContaFachada.getInstance().inserirConta(conta);
		Estoque estoque = new Estoque();
		for(int i=0;i<itens.size();i++){
			estoque.setProduto(itens.get(i).getProduto());
			GerenciarEstoqueFachada.getInstance().
			addQuantidadeEstoque(estoque, itens.get(i).getQuantidade());
		}
	}
	public void realizarVenda(List<Itens> itens,Pessoa cliente){
		Contas conta = new Contas();
		conta.setPessoa(cliente);
		conta.setValor(verTotal(itens));
		TipoConta tConta = new TipoConta();
		tConta.setId(1);//venda
		conta.setTipoConta(GerenciarTipoContaFachada
				.getInstance().buscarTipoConta(tConta));
		Transacao transacao = new Transacao();
		TipoTransacao tTransacao = new TipoTransacao();
		tTransacao.setId(1);//venda
		Estoque estoque = new Estoque();
		for(int i=0;i<itens.size();i++){
			estoque.setProduto(itens.get(i).getProduto());
			estoque = GerenciarEstoqueFachada.getInstance().buscarEstoquePorProduto(estoque);
			GerenciarItemFachada.getInstance().inserirItem(itens.get(i));
			GerenciarEstoqueFachada.getInstance().
			diminuirQuantidadeEstoque(estoque, itens.get(i).getQuantidade());
		}

		transacao.setTipoTransacao(GerenciarTipoTransacaoFachada.getInstance().buscarTipoTransacao(tTransacao));
		transacao.setItens(itens);
		GerenciarTransacaoFachada.getInstance().inserirTransacao(transacao);
		conta.setTransacao(transacao);
		GerenciarContaFachada.getInstance().inserirConta(conta);



	}
	public double verTotal(List<Itens> itens){
		double soma = 0;
		for(int i=0;i<itens.size();i++){
			soma+= itens.get(i).getProduto().getPreco();
		}
		return soma;
	}
	public void realizarVendaD(List<Itens> itens,List<Contas> contas){
		TipoConta tConta = new TipoConta();
		tConta.setId(1);
		tConta = GerenciarTipoContaFachada.getInstance().buscarTipoConta(tConta);
		TipoTransacao tTransacao = new TipoTransacao();
		tTransacao.setId(1);// setar o tipo de transacao 1 no caso de venda e 2 no caso de compra
		Estoque estoque = new Estoque();
		Transacao transacao = new Transacao();
		transacao.setTipoTransacao(tTransacao);
		transacao = GerenciarTransacaoFachada.getInstance().inserirTransacao(transacao);

		for(Contas c : contas){
			c.setTipoConta(tConta);
			c = GerenciarContaFachada.getInstance().inserirConta(c);
			transacao.getContas().add(c);
			//GerenciarTransacaoFachada.getInstance().atualizar(transacao);

		}

		for(Itens item: itens){
			item = GerenciarItemFachada.getInstance().inserirItem(item);
			Produto produto = new Produto();
			produto.setId(item.getProduto().getId());
			produto = GerenciarProdutoFachada.getInstance().buscarProduto(produto);
			estoque.setProduto(produto);
			estoque = GerenciarEstoqueFachada.getInstance().buscarEstoquePorProduto(estoque);
			System.out.println(estoque.getProduto().getDescricao());

			GerenciarEstoqueFachada.getInstance().diminuirQuantidadeEstoque(estoque, item.getQuantidade());
		}


	}
	public void realizarCompraD(List<Itens> itens,List<Contas> contas){
		TipoConta tConta = new TipoConta();
		tConta.setId(2);
		tConta = GerenciarTipoContaFachada.getInstance().buscarTipoConta(tConta);
		TipoTransacao tTransacao = new TipoTransacao();
		tTransacao.setId(2);// setar o tipo de transacao 1 no caso de venda e 2 no caso de compra
		Estoque estoque = new Estoque();
		Transacao transacao = new Transacao();
		transacao.setTipoTransacao(tTransacao);
		transacao = GerenciarTransacaoFachada.getInstance().inserirTransacao(transacao);

		for(Contas c : contas){
			c.setTipoConta(tConta);
			c = GerenciarContaFachada.getInstance().inserirConta(c);
			transacao.getContas().add(c);
			//GerenciarTransacaoFachada.getInstance().atualizar(transacao);

		}

		for(Itens item: itens){
			item = GerenciarItemFachada.getInstance().inserirItem(item);
			Produto produto = new Produto();
			produto.setId(item.getProduto().getId());
			produto = GerenciarProdutoFachada.getInstance().buscarProduto(produto);
			estoque.setProduto(produto);
			estoque = GerenciarEstoqueFachada.getInstance().buscarEstoquePorProduto(estoque);
			System.out.println(estoque.getProduto().getDescricao());
			GerenciarEstoqueFachada.getInstance().addQuantidadeEstoque(estoque, item.getQuantidade());
		}


	}
	/***
	 *
	 * @param vendedor
	 * @param conta
	 * @param total
	 * Este metodo eh executado ao se realizar uma venda, onde uma porcentagem do total da venda eh repassado ao
	 * funcionario que realizou a venda.
	 */
	public void gerarComissao(Contas conta){
		Transacao transacao = new Transacao();
		TipoTransacao tTransacao = new TipoTransacao();
		tTransacao.setId(2);// indicando compra
		tTransacao = GerenciarTipoTransacaoFachada.getInstance().buscarTipoTransacao(tTransacao);
		transacao.setTipoTransacao(tTransacao);
		TipoConta tConta = new TipoConta();
		tConta.setId(1);// conta a vista
		tConta = GerenciarTipoContaFachada.getInstance().buscarTipoConta(tConta);
		conta.setTipoConta(tConta);
		conta = GerenciarContaFachada.getInstance().inserirConta(conta);
		List<Contas> contas = new ArrayList<Contas>();
		contas.add(conta);
		transacao.setContas(contas);
		GerenciarTransacaoFachada.getInstance().inserirTransacao(transacao);

	}

}
